/*
*
*
*     文档创建：jjl, jjl@hzncc.com
*
*     PicoRV32是Clifford Wolf <clifford@clifford.at>实现的RISC-V指令集软核
*       只看代码感觉没有学进去，通过使用systemverilg重新实现深入学习。
*/

//定义一个包，把数据结构收拢包中
package picorv32_defs;
    parameter   VERSION = "1.0";        //定义本IPcore版本号
endpackage

//定义PCPI接口
interface pcpi_bus(input clk, input reset_n);
    logic           pcpi_valid          ;
    logic   [31:0]  pcpi_insn           ;   //当前正在解码的指令
    logic   [31:0]  pcpi_rs1            ;   //当前指令的原操作数1
    logic   [31:0]  pcpi_rs2            ;   //当前指令的原操作数2
    logic   [31:0]  pcpi_rd             ;   //当前指令的目的操作数
    logic           pcpi_wr             ;
    logic           pcpi_wait           ;
    logic           pcpi_ready          ;
    //主接口定义
    modport master(
            input           clk         ,
            input           reset_n     , 
            output          pcpi_valid  ,
            output          pcpi_insn   ,
            output          pcpi_rs1    ,
            output          pcpi_rs2    , 
            input           pcpi_rd     ,
            input           pcpi_wr     ,
            input           pcpi_wait   ,
            input           pcpi_ready  
    );
    modport slave(
            input           clk         ,
            input           reset_n     , 
            input           pcpi_valid  ,
            input           pcpi_insn   ,
            input           pcpi_rs1    ,
            input           pcpi_rs2    , 
            output          pcpi_rd     ,
            output          pcpi_wr     ,
            output          pcpi_wait   ,
            output          pcpi_ready  
    ); 
endinterface

//定义mem接口
interface mem_bus(input clk, input reset_n);
    logic           mem_valid           ;   //master输出有效
    logic           mem_ready           ;   //slave数据输出准备好
    logic           mem_instr           ;   //当前地址是取指令标志
    logic   [31:0]  mem_addr            ;   //master输出内存地址
    logic   [31:0]  mem_wdata           ;   //master输出写数据
    logic   [3:0]   mem_wstrb           ;   //master写数据使能
    logic   [31:0]  mem_rdata           ;   //master读数据

    //主接口定义
    modport master(
            input           clk         ,
            input           reset_n     , 
            output          mem_valid   ,
            output          mem_instr   ,
            output          mem_addr    ,
            output          mem_wdata   ,
            output          mem_wstrb   , 
            input           mem_ready   ,
            input           mem_rdata   ,
    );
    modport slave(
            input           clk         ,
            input           reset_n     , 
            input           mem_valid   ,
            input           mem_instr   ,
            input           mem_addr    ,
            input           mem_wdata   , 
            input           mem_wstrb   ,
            output          mem_ready   ,
            output          mem_rdata    
    ); 
endinterface

// picorv32_sv 对某些配置项做默认处理
// 下面被屏蔽的配置，是按默认写到代码中的不支持重新配置
module picorv32_sv
        #(
            //parameter   [0:0]   ENABLE_COUNTER      =       1       ,
            //parameter   [0:0]   ENABLE_COUNTER64    =       1       ,
            //parameter   [0:0]   ENABLE_REGS_16_31   =       1       ,
            //
          )(
            sys_clk         ,
            sys_reset_n     ,
            signal
        );

    input           sys_clk         ;
    input           sys_reset_n     ;





endmodule
